/**
 Práctica 1 asignatura Desarrollo Aplicaciones Móviles

    -Informática-

Integrantes:  Esperanza González de la Mora & Félix López Garcinuño & José Miguel Bilbao Navas
 */

package capa_dominio;

import capa_datos.DatosRS;
import miCartera.MiCartera;
import capa_interfaz.FNuevaMoneda;
import capa_interfaz.FEditarGasto;
import capa_interfaz.FBorrarTodosGastos;
import capa_interfaz.FAnadeGasto;
import capa_interfaz.FVerMonedas;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Item;

public class ControladorInterfaz {
    private MiCartera miMidlet;
    private DatosRS auxDatos;


    public ControladorInterfaz(MiCartera midlet){
        miMidlet=midlet;
        auxDatos=new DatosRS();

    }

    public void meterRegistrosMonedas(){
        String[] m=new String[48];

        auxDatos.borraMonedas();

        m[0]="Euro";
        m[1]="EUR";
        m[2]="1";
        m[3]="1.41";
        m[4]="0.870";
        m[5]="1.257";
        m[6]="113.802";
        m[7]="1.33418";

        m[8]="US Dollar";
        m[9]="USD";
        m[10]="0.709";
        m[11]="1";
        m[12]="0.617";
        m[13]="0.8921";
        m[14]="80.68";
        m[15]="0.9466";

        m[16]="British Pound Sterling";
        m[17]="GBP";
        m[18]="1.148";
        m[19]="1.619";
        m[20]="1";
        m[21]="1.444";
        m[22]="130.669";
        m[23]="1.53313";

        m[24]="Swiss Franc";
        m[25]="CHF";
        m[26]="0.795";
        m[27]="1.1209";
        m[28]="0.6921";
        m[29]="1";
        m[30]="90.4383";
        m[31]="1.0611";

        m[32]="Yapanese Yen";
        m[33]="JPY";
        m[34]="0.00878";
        m[35]="0.0123";
        m[36]="0.0076";
        m[37]="0.0110";
        m[38]="1";
        m[39]="0.01173";

        m[40]="Australlian Dollar";
        m[41]="AUD";
        m[42]="0.749";
        m[43]="1.05640";
        m[44]="0.6522";
        m[45]="0.9424";
        m[46]="85.2303";
        m[47]="1";
        auxDatos.escribeMonedas(m);

    }

    public void meterRegistrosGastos(){
        String[] stringprueba=new String[12];

        auxDatos.borraGastos();

        stringprueba[0]="25-03-2011";
        stringprueba[1]="compra ebay";
        stringprueba[2]="123 EUR";
        stringprueba[3]="25-03-2011";
        stringprueba[4]="cine";
        stringprueba[5]="50 EUR";
        stringprueba[6]="12-02-2011";
        stringprueba[7]="cena importante";
        stringprueba[8]="150 EUR";
        stringprueba[9]="22-09-2002";
        stringprueba[10]="compra super";
        stringprueba[11]="30 EUR";
        auxDatos.escribeGastos(stringprueba);

    }
    public void meterListaDescripcionMonedas(){

        auxDatos.borraDescripciones();

        String cadenadescripciones="Euro (EUR),British Pound (GBP),United States Dollar (USD),Australian Dollar (AUD),Canadian Dollar (CAD),Swiss Franc (CHF),Chinese Yuan (CNY),Hong Kong Dollar (HKD),Indonesian Rupiah (IDR),Indian Rupee (INR),Japanese Yen (JPY),Thai Baht (THB),Albanian Lek (ALL),Algerian Dinar (DZD),Aluminium Ounces (XAL),Argentine Peso (ARS),Aruba Florin (AWG,Bahamian Dollar (BSD),Bahraini Dinar (BHD),Bangladesh Taka (BDT),Barbados Dollar (BBD),Belarus Ruble (BYR),Belize Dollar (BZD),Bermuda Dollar (BMD),Bhutan Ngultrum (BTN),Bolivian Boliviano (BOB),Botswana Pula (BWP),Brazilian Real (BRL),Brunei Dollar (BND),Bulgarian Lev (BGN),Burundi Franc (BIF),Cambodia Riel (KHR),Cape Verde Escudo (CVE),Cayman Islands Dollar (KYD),CFA Franc (BCEAO),CFA Franc (BEAC),Chilean Peso (CLP),Colombian Peso (COP),Comoros Franc (KMF),Copper Pounds (XCP),Costa Rica Colon (CRC),Croatian Kuna (HRK),Cuban Peso (CUP),Czech Koruna (CZK),Danish Krone (DKK),Dijibouti Franc (DJF),Dominican Peso (DOP),East Caribbean Dollar (XCD),Ecuador Sucre (ECS),Egyptian Pound (EGP),El Salvador Colon (SVC),Eritrea Nakfa (ERN),Estonian Kroon (EEK),Ethiopian Birr (ETB),Falkland Islands Pound (FKP),Fiji Dollar (FJD),Gambian Dalasi (GMD),Ghanian Cedi (GHC),Gibraltar Pound (GIP),Gold Ounces (XAU),Guatemala Quetzal (GTQ),Guinea Franc (GNF),Guyana Dollar (GYD),Haiti Gourde (HTG),Honduras Lempira (HNL),Hungarian Forint (HUF),Iceland Krona (ISK),Iran Rial (IRR),Iraqi Dinar (IQD),Israeli Shekel (ILS),Jamaican Dollar (JMD),Jordanian Dinar (JOD),Kazakhstan Tenge (KZT),Kenyan Shilling (KES),South Korean Won (KRW),Kuwaiti Dinar (KWD),Lao Kip (LAK),Latvian Lat (LVL),Lebanese Pound (LBP),Lesotho Loti (LSL),Liberian Dollar (LRD),Libyan Dinar (LYD),Lithuanian Lita (LTL),Macau Pataca (MOP),Macedonian Denar (MKD),Malawi Kwacha (MWK),Malaysian Ringgit (MYR),Maldives Rufiyaa (MVR),Maltese Lira (MTL),Mauritania Ougulya (MRO),Mauritius Rupee (MUR),Mexican Peso (MXN),Moldovan Leu (MDL),Mongolian Tugrik (MNT),Moroccan Dirham (MAD),Myanmar Kyat (MMK),Namibian Dollar (NAD),Nepalese Rupee (NPR),Neth Antilles Guilder (ANG),Turkish Lira (TRY),New Zealand Dollar (NZD),Nicaragua Cordoba (NIO),Nigerian Naira (NGN),North Korean Won (KPW),Norwegian Krone (NOK),Omani Rial (OMR),Pacific Franc (XPF),Pakistani Rupee (PKR),Palladium Ounces (XPD),Panama Balboa (PAB),Papua New Guinea Kina (PGK),Paraguayan Guarani (PYG),Peruvian Nuevo Sol (PEN),Philippine Peso (PHP),Platinum Ounces (XPT),Polish Zloty (PLN),Qatar Rial (QAR),Romanian New Leu (RON),Russian Rouble (RUB),Rwanda Franc (RWF),Samoa Tala (WST),Sao Tome Dobra (STD),Saudi Arabian Riyal (SAR),Seychelles Rupee (SCR),Sierra Leone Leone (SLL),Silver Ounces (XAG),Singapore Dollar (SGD),Slovak Koruna (SKK),Slovenian Tolar (SIT),Solomon Islands Dollar (SBD),Somali Shilling (SOS),South African Rand (ZAR),Sri Lanka Rupee (LKR),St Helena Pound (SHP),Sudanese Pound (SDG),Swaziland Lilageni (SZL),Swedish Krona (SEK),Syrian Pound (SYP),Taiwan Dollar (TWD),Tanzanian Shilling (TZS),Tonga Pa'ang (TOP),Trinidad & Tobago Dollar (TTD),Tunisian Dinar (TND),UAE Dirham (AED),Ugandan Shilling (UGX),Ukraine Hryvnia (UAH),Uruguayan New Peso (UYU),Vanuatu Vatu (VUV),Venezuelan Bolivar Fuerte (VEF),Vietnam Dong (VND),Yemen Riyal (YER),Zambian Kwacha (ZMK),Zimbabwe dollar (ZWD),";
        auxDatos.escribeDescripcionMonedas(cadenadescripciones);

    }

    public String[] extraerGastos(){//Lo llama MiCartera
        String[] datosGastos=null;//array contenedor de gastos        

        //Extraemos array de los gastos de MiCartera
        datosGastos=auxDatos.leeDatos("gastos");

        if (datosGastos.length==0){
            //Añadimos un StringItem al formulario para indicar que no hay gastos
            miMidlet.anadeStringItem("", "Sin gastos pendientes", Item.PLAIN);           

        }else{
        //Ordenamos en forma descendente por defecto
        datosGastos=auxDatos.ordenacionTemporalDescendente(datosGastos);        

        }
        return datosGastos;
    }

    public void muestraMonedas(){//Lo llamaMiCartera
        String[] listamonedas;
        String[] divisasMR;
        FVerMonedas formmoneditas;
        
        //Creo nueva pantalla formulario de monedas
        formmoneditas=new FVerMonedas(miMidlet, this);
        //Leo de RecordStore de monedas la lista de monedas
        listamonedas=auxDatos.leeDatos("monedas");

        //Extrae divisas de la tabla de divisas con respecto a la MR
        divisasMR=auxDatos.extraeDivisasRespectoMR(miMidlet.monedaReferencia);

        //Ponemos formulario
        formmoneditas.pintate(listamonedas, divisasMR, miMidlet.monedaReferencia);

        
    }

    public String[] extraeMonedas(){//Lo llama FAnadeGasto y FEditarGasto
        String[] listamonedas;
        //Leo de RecordStore de monedas la lista de monedas
        listamonedas=auxDatos.leeDatos("monedas");
        return listamonedas;
    }

    public void escribeMonedas(String[] listamon){
        auxDatos.escribeMonedas(listamon);
    }
     
    public void haceRankingFechas(){//Lo llama MiCartera
        String[] datosGastos;//array contenedor de gastos        

        //Extraemos array de los gastos
        datosGastos=auxDatos.leeDatos("gastos");

        //Obtenemos y ordenamos de forma ascendete los gastos, el más reciente el primero
         if (datosGastos.length==0){
            //Añadimos un StringItem al formulario para indicar que no hay gastos
            miMidlet.anadeStringItem("Mis gastos", "No seas traidor,no hay gastos", Item.PLAIN);

        }else{
        //Ordenamos en forma ascendente
        datosGastos=auxDatos.ordenacionTemporalAscendente(datosGastos);

         //Actualizamos Gastos de MiCartera
          miMidlet.actualizaListaGastos(datosGastos);
        }
    }

     public void haceRankingGastos(){//Lo llama MiCartera
        String[] datosGastos;//array contenedor de gastos       
        
        //Extraemos array de los gastos
        datosGastos=auxDatos.leeDatos("gastos");

        //Obtenemos y ordenamos de forma ascendete los gastos, el más reciente el primero
         if (datosGastos.length==0){
            //Añadimos un StringItem al formulario para indicar que no hay gastos
            miMidlet.anadeStringItem("Mis gastos", "No seas traidor,no hay gastos", Item.PLAIN);

        }else{
        //Ordenamos en forma ascendente
        datosGastos=auxDatos.ordenacionAscendenteGastos(datosGastos);

        //Actualizamos Gastos de MiCartera
         miMidlet.actualizaListaGastos(datosGastos);
        }
    }


    public void anadeGasto(){//Lo llama MiCartera
        FAnadeGasto formuAnade;

        //Crea formulario
        formuAnade=new FAnadeGasto(miMidlet,this);

    }
    
    public void andeGastoRecordStore(FAnadeGasto formu){//Lo llama FAnadeGasto
        //Añade gasto al RecordStore en caso de aceptar
        
        String[] registrodado=new String[3];
        String[] nuevogasto=new String[3];
        
        //Extraemos el registro de la moneda seleccionada
        //a partir del índice del elemento seleccionado en el ChoiceGroup Monedas
        //y sólo no es necesario el campo 2 de posición 1 en el array donde está las siglas de la moneda
        registrodado=auxDatos.dameRegistroMonedas(formu.indicecampomoneda);
        //System.out.println("Carga bien el registro de monedas por posicion?:"+registrodado[0]+registrodado[1]+registrodado[2]);

        //System.out.println("Valor de posicion de ChoiceGroup Monedas"+formu.indicecampomoneda);
        //System.out.println("Valor campofecha:"+formu.campofecha);
        //System.out.println("Valor campocategoria:"+formu.campocategoria);
        //System.out.println("Valor campocantindad:"+formu.campocantidad);


        if (formu.campofecha==null){
            formu.muestraErrorFecha();
        }else if(formu.campocategoria==null || formu.campocategoria.equals("")){
            formu.muestraErrorCategoria();
        }else if (formu.campocantidad==null || formu.campocantidad.equals("")){
            formu.muestraErrorCantidad();
        }else{

            //Formamos la cadena de strings del Gasto
            nuevogasto[0]=formu.campofecha;
            nuevogasto[1]=formu.campocategoria;
            nuevogasto[2]=formu.campocantidad+" "+registrodado[1];

            //Escribimos en el RecordStore el registro
            auxDatos.escribeGastos(nuevogasto);

            //Avisa de que se ha creado de Alerta
            formu.avisoCreacion();
            //Actualizamos Gastos de MiCartera
            miMidlet.actualizaGastos();

        }
    }

    public void cambiaGastoRecordStore(FEditarGasto formu){//Lo llama FEditarGasto
        //Cambia gasto al RecordStore en caso de aceptar

        String[] registrodado=new String[3];
        String[] nuevogasto=new String[3];

        //Extraemos el registro de la moneda seleccionada
        //a partir del índice del elemento seleccionado en el ChoiceGroup Monedas
        //y sólo no es necesario el campo 2 de posición 1 en el array donde está las siglas de la moneda
        registrodado=auxDatos.dameRegistroMonedas(formu.indicemoneda);
        //System.out.println("Carga bien el registro de monedas por posicion?:"+registrodado[0]+registrodado[1]+registrodado[2]);

        //System.out.println("Valor de posicion de ChoiceGroup Monedas"+formu.indicemoneda);
        //System.out.println("Valor campofecha:"+formu.cadenafecha);
        //System.out.println("Valor campocategoria:"+formu.cadenacategoria);
        //System.out.println("Valor campocantindad:"+formu.cadenacantidad);


        if (formu.cadenafecha==null){
            formu.muestraErrorFecha();
        }else if(formu.cadenacategoria==null || formu.cadenacategoria.equals("")){
            formu.muestraErrorCategoria();
        }else if (formu.cadenacantidad==null || formu.cadenacantidad.equals("")){
            formu.muestraErrorCantidad();
        }else{

            //Formamos la cadena de strings del Gasto
            nuevogasto[0]=formu.cadenafecha;
            nuevogasto[1]=formu.cadenacategoria;
            nuevogasto[2]=formu.cadenacantidad+" "+registrodado[1];

            //Cambiamos en el RecordStore el registro
            auxDatos.cambiaGasto(nuevogasto, formu.posicionrs);

            //System.out.println("Datos del nuevo gasto:"+nuevogasto[0]+nuevogasto[1]+nuevogasto[2]);

            //Avisa de que se ha creado de Alerta
            formu.avisoCreacion();
            //Actualizamos Gastos de MiCartera
            miMidlet.actualizaGastos();

        }

    }

    public void editarGasto(String cadenagastoseleccionado){//Lo llama MiCartera
        String[] campoGasto;
        FEditarGasto formueditar;
        int posicionrs=0;

        //System.out.println("Cadena del gasto:"+cadenagastoseleccionado);

        //Extraemos campos de la cadena
        campoGasto=new String[3];
        int posicionblanco=cadenagastoseleccionado.indexOf("(");
        campoGasto[0]=cadenagastoseleccionado.substring(0, posicionblanco);

        int posicionblanco2=cadenagastoseleccionado.indexOf("):", posicionblanco+1);
        campoGasto[1]=cadenagastoseleccionado.substring(posicionblanco+1,posicionblanco2);

        campoGasto[2]=cadenagastoseleccionado.substring(posicionblanco2+2, cadenagastoseleccionado.length());

        //System.out.println("La cadena dividida por campo0:"+campoGasto[0]);
        //System.out.println("La cadena dividida por campo1:"+campoGasto[1]);
        //System.out.println("La cadena dividida por campo2:"+campoGasto[2]);

        //Busca en RecordStore de gastos la posicion en el RecordStore de este gasto
        posicionrs=auxDatos.buscaPosicionGasto(campoGasto);

        //System.out.println("Valor de posicion en el recorStore del gasto"+posicionrs);

        //Creamos formulario de edición
        formueditar=new FEditarGasto(this, miMidlet, campoGasto, posicionrs);

    }

    public int buscaMonedaRecordStore(String moneda){//Lo llama FAnadeGasto y VerMonedas
        //busca el índice para el ChoiceGroup de monedas a través
        //de las siglas de la moneda

        //System.out.println("Valor siglas de moneda:"+moneda);
        return auxDatos.dameIndiceMoneda(moneda)-1;

    }

    public void borrarGastoRecordStore (int posicion){//Lo llama FBorrarGasto
        auxDatos.borraGasto(posicion);

    }

    public double calculaTotalGasto(String monedareferencia){//Lo llama MiCartera
        String [] listagastos;
        String [] listamonedas;
        String cadenamoneda;
        double gastoTotalMonedaReferencia=0;
        double gastoTotalMonedaDiferente=0;
        int indicecolumnaconversion=0;//me dice el índice de columna de la tabla de divisas cruzadas


        //Extrae lista de gastos y monedas
        listagastos=auxDatos.leeDatos("gastos");
        listamonedas=auxDatos.leeDatos("monedas");

        //Calcula el gastoTotal en la moneda de referencia
        for (int i=0; i<=listagastos.length-1; i=i+3){
            //System.out.println("Mostrar listagastos[i+2]:"+listagastos[i+2]);
            cadenamoneda=listagastos[i+2].substring(listagastos[i+2].indexOf(" ")+1, listagastos[i+2].length());
            if (cadenamoneda.equals(monedareferencia)){
                //Si es valor de la misma referencia se suma y se va acumulando
                gastoTotalMonedaReferencia=gastoTotalMonedaReferencia+Double.parseDouble(listagastos[i+2].substring(0, listagastos[i+2].indexOf(" ")));
            }else{ //Si el gasto es en una moneda diferente a la de referencia se multiplica por el valor

                //Caluculo número de registros por tamaño de array
                double n=(-2+Math.sqrt(4+4*listamonedas.length))/2;
                //Pasamos a entero redondeando hacia abajo
                int nentero=(int)n;

                for (int j=0; j<=listamonedas.length-1; j=j+nentero+2){//Accedemos al valor de divisas en la tabla de divisas cruzadas y multiplicamos por la cantidad

                    if (monedareferencia.equals(listamonedas[j+1])){//Nos colocamos en la fila de la tabla de divisas cruzadas para tener las conversiones
                        indicecolumnaconversion=auxDatos.dameIndiceMoneda(cadenamoneda); //Nos dice el índice de columna de la tabla de conversiones de divisas, +1 porque el metodo sigue indizacion de lista y array
                        //System.out.println("Valor del gasto pasado a double:"+listagastos[i+2].substring(0, listagastos[i+2].indexOf(" ")));
                        //System.out.println("Divisa a multiplicar de la tabla divisas:"+listamonedas[j+1+indicecolumnaconversion]);
                        //System.out.println("Indice de la columna de conversión:"+indicecolumnaconversion);
                        gastoTotalMonedaDiferente=gastoTotalMonedaDiferente+(Double.parseDouble(listagastos[i+2].substring(0, listagastos[i+2].indexOf(" ")))*(1/Double.parseDouble(listamonedas[j+1+indicecolumnaconversion])));
                        //System.out.println("Gasto total en moneda de referencia:"+String.valueOf(gastoTotalMonedaDiferente));
                    }
                    
                }
            }
        }


        return gastoTotalMonedaReferencia+gastoTotalMonedaDiferente;
    }

    public void cambiaMonedaReferencia(FVerMonedas formu){//Lo llama FVerMonedas
        String[] cadenaMoneda;

        cadenaMoneda=auxDatos.dameRegistroMonedas(formu.monedaSeleccionada);

        if (cadenaMoneda[1].equals(miMidlet.monedaReferencia)){//No ha cambiado MR, sigue el mismo
            formu.muestraAviso();
        }else{//Ha cambiado de moneda de referencia MR
            miMidlet.monedaReferencia=cadenaMoneda[1];
            formu.avisoCambioMR();
            miMidlet.actualizaGastos();
        }

    }

    public void nuevaMoneda (){//Lo llama FAnadeGasto y FVerMonedas
        FNuevaMoneda formuNuevaMoneda;

        //Crea formulario de Nueva Moneda
        formuNuevaMoneda=new FNuevaMoneda(miMidlet,this);
    }


    public void estableceConexion(FNuevaMoneda formu){//Lo llama FNuevaMoneda
        //Establece conexión según las siglas de moneda que le pasemos
        //y especifica si existe
        String URL = "http://download.finance.yahoo.com";
        String ACTION = "/d/quotes?s=";
        String QUERY = "=X&f=sl1";        
        HttpConnection http = null;
        InputStream is = null;
        double divisaresultado=0;

        

        if (formu.cadenasiglas.equals("")){//Si el campo está vacío
            formu.muestraErrorSiglaVacia();
        }else{//Si hemos introducido siglas de nueva moneda

            //Creamos dirección a consultar
            String url = URL + ACTION +formu.cadenasiglas+formu.cadenasiglas + QUERY;

             try{
                 //Creamos la conexión
                  http=(HttpConnection)Connector.open(url);

                 //Informamos del tipo de petición que vamos a efectuar
                 http.setRequestMethod(HttpConnection.GET);

                 //Establecemos algunos campos de cabecera, opcional
                 http.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLCD-1.0");
                 http.setRequestProperty("Content-Language", "es-ES");

                 //Miramos si existe la moneda especificada por las siglas
                 is = http.openInputStream();

                 //Obtenemos datos
                 byte datos[] = new byte[75];
                 is.read(datos);
                 String resultado = new String(datos);
                 //System.out.println("Resultado de respuesta:"+resultado);

                 //Extraemos la divisa-resultado
                 //System.out.println(resultado.substring(resultado.indexOf(",")+1, resultado.length()));
                 divisaresultado=Double.parseDouble(resultado.substring(resultado.indexOf(",")+1, resultado.length()));

                 //Comprobamos, si divisa es =1 existe tal moneda, si es =0 no existe la moneda
                 //Y comprobamos si no está ya en nuestro RecordStore y el recordStore no está vacío
                 int posicionmoneda=auxDatos.dameIndiceMoneda(formu.cadenasiglas);
                 if(posicionmoneda==0){//La moneda ya está registrada
                     if(divisaresultado==1){
                         //La moneda existe y no está ya en nuestro RecordStore
                        this.registramosNuevaMonedaRecordStore(formu.cadenasiglas);
                        formu.avisoCreacionMoneda(formu.cadenasiglas);
                     }else{
                         formu.muestraErrorExistenciaSigla();
                     }
                     
                 }else{
                     formu.muestraErrorYaExiste();
                 }

             }catch (IOException e){
                System.out.println("Error al conectar");

             }
            try{
                http.close();
            }catch (IOException e){
                System.out.println("Error al cerrar la conexión");
            }
        }
    }

    public void registramosNuevaMonedaRecordStore(String siglasnuevamoneda){//Lo llama método estableceConexion
        //Este método introduce la nueva moneda al RecordStore de monedas
        //y completa la tabla de divisas cruzadas
        HttpConnection http = null;
        InputStream is = null;
        String[] filadivisasnuevamoneda=null;
        String[] columnadivisasnuevamoneda=null;
        String[] listamonedas;
        String descripcion="";        

         //Extraemos descripción de la nueva moneda
         //La moneda ya está verificada que existe
            descripcion=auxDatos.buscaDescripcionMoneda(siglasnuevamoneda);

            if (descripcion==""){//No ha encontrado la descripción en nuestro rsdescripciones
                descripcion="No tiene";
            }

        //Extraemos la fila de divisas de la moneda en particular para la tabla de divisas cruzadas
            listamonedas=auxDatos.leeDatos("monedas");

            //Caluculo número de registros por tamaño de array de listamonedas
            double n=(-2+Math.sqrt(4+4*listamonedas.length))/2;

            //Pasamos a entero redondeando hacia abajo
            int nentero=(int)n;

            //Inicializamos listadivisasnuevamoneda con número de monedas que se va almacenar recordStore monedas+1
            filadivisasnuevamoneda=new String[nentero+1];

            int contadordevueltas=0;//contador de vueltas para filadivisasnuevamoenda
            for (int i=0; i<= listamonedas.length-1;i=i+nentero+2){
                //Creamos dirección a consultar
                //System.out.println("Valor de listamonedas[i+1]:"+listamonedas[i+1]);
                String urlconsulta = "http://download.finance.yahoo.com/d/quotes?s="+siglasnuevamoneda+listamonedas[i+1]+"=X&f=sl1";

                 try{
                    //Creamos la conexión
                     http=(HttpConnection)Connector.open(urlconsulta);

                    //Informamos del tipo de petición que vamos a efectuar
                    http.setRequestMethod(HttpConnection.GET);

                    //Establecemos algunos campos de cabecera, opcional
                    http.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLCD-1.0");
                    http.setRequestProperty("Content-Language", "es-ES");

                    //Miramos si existe la moneda especificada por las siglas
                    is = http.openInputStream();

                    //Obtenemos datos
                    byte datos[] = new byte[75];
                    is.read(datos);
                    String resultado = new String(datos);
                    //System.out.println("Resultado de respuesta:"+resultado);

                    //Extraemos la divisa-resultado
                    //System.out.println(resultado.substring(resultado.indexOf(",")+1, resultado.length()));
                    double divisaresultado=Double.parseDouble(resultado.substring(resultado.indexOf(",")+1, resultado.length()));
                    filadivisasnuevamoneda[contadordevueltas]=String.valueOf(divisaresultado);
                    //System.out.println("Se guarda en filadivisasnuevamoneda[contadordevuelas:"+filadivisasnuevamoneda[contadordevueltas]+"y contadordevueltas:"+contadordevueltas);

                    //Cerramos InputStream
                    is.close();
                    datos=null;
                    

                    //sumamos al contador
                    contadordevueltas++;

                }catch (IOException e){
                    System.out.println("Error al conectar");
                }
                
            }
            try{
                   http.close();
            }catch (IOException e){
                   System.out.println("Error al cerrar la conexión");
            }           
        
            //Una vez almacenamos las divisas correspondiente a las monedas almacenadas, introducimos la divisa de la propia moneda:1
            filadivisasnuevamoneda[nentero]="1";
            //System.out.println("Se guarda en filadivisasnuevamoneda[nentero]:"+filadivisasnuevamoneda[contadordevueltas]+"y contadordevueltas_final:"+contadordevueltas);


        //Extraemos la columna de divisas de la moneda en particular para la tabla de divisas cruzadas

            contadordevueltas=0;//inicializamos contador de vueltas para columnadivisasnuevamoenda
            //Inicializamos columnadivisasnuevamoneda con número de monedas que se va almacenar recordStore monedas
            columnadivisasnuevamoneda=new String[nentero];
            for (int i=0; i<= listamonedas.length-1;i=i+nentero+2){
                //Creamos dirección a consultar
                String urlconsulta2 = "http://download.finance.yahoo.com/d/quotes?s="+listamonedas[i+1]+siglasnuevamoneda+"=X&f=sl1";

                 try{
                    //Creamos la conexión
                     http=(HttpConnection)Connector.open(urlconsulta2);

                    //Informamos del tipo de petición que vamos a efectuar
                    http.setRequestMethod(HttpConnection.GET);

                    //Establecemos algunos campos de cabecera, opcional
                    http.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLCD-1.0");
                    http.setRequestProperty("Content-Language", "es-ES");

                    //Miramos si existe la moneda especificada por las siglas
                    is = http.openInputStream();

                    //Obtenemos datos
                    byte datos[] = new byte[75];
                    is.read(datos);
                    String resultado = new String(datos);
                    //System.out.println("Resultado de respuesta:"+resultado);

                    //Extraemos la divisa-resultado
                    //System.out.println(resultado.substring(resultado.indexOf(",")+1, resultado.length()));
                    double divisaresultado=Double.parseDouble(resultado.substring(resultado.indexOf(",")+1, resultado.length()));
                    //System.out.println("Valor de contador de vueltas:"+contadordevueltas);
                    columnadivisasnuevamoneda[contadordevueltas]=String.valueOf(divisaresultado);
                    //System.out.println("Se guarda en columnaivisasnuevamoneda[contadordevuelas:"+columnadivisasnuevamoneda[contadordevueltas]+"y contadordevueltas:"+contadordevueltas);

                    //Resetamos y cerramos InputStream
                    is.close();
                    datos=null;

                    //sumamos al contador
                    contadordevueltas++;

                }catch (IOException e){
                    System.out.println("Error al conectar");
                }
                
            }
            try{
               http.close();
            }catch (IOException e){
                System.out.println("Error al cerrar la conexión");
            }

            //Llamamos a almacenar al RecordStore de monedas la nueva moneda
            auxDatos.introducirNuevaMoneda(siglasnuevamoneda,descripcion,filadivisasnuevamoneda,columnadivisasnuevamoneda);

    }

    public void borrarGastos(){//Lo llama MiCartera
        FBorrarTodosGastos formuborrar;

        formuborrar=new FBorrarTodosGastos(miMidlet,this);
    }


    public void borrarTodosGastoRecordStore(){//Lo llama FBorrarTodosGastos

        //Borramos todos los gastos del recordStore gastos
        auxDatos.borraGastos();

    }
}
